package br.com.locasis.funcionalidades;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.international.StatusMessage.Severity;
import org.jboss.seam.international.StatusMessages;

import br.com.locasis.entity.TabelaValor;
import br.com.locasis.entity.Usuario;

@Name("cadastrarTabela")
@Scope(ScopeType.CONVERSATION)
//@Restrict(value="#{identity.hasRole('"+PerfilUsuario.PERFIL_PETSHOP+"')}")
public class CadastrarTabela {
	
	@In(create=true)
	private EntityManager entityManager;
	
	@In(required = false)
	Usuario usuarioLogado;
	
	@In(value = "statusMessages")
	protected StatusMessages messages;
	
	private TabelaValor tabelaEdicao;
	
	private List<TabelaValor> listaTabelas;
	
	private boolean exibePopupNovaTabela;
	
	private boolean selecionadoTodos;

	public TabelaValor getTabelaEdicao() {
		if (tabelaEdicao == null) {
			tabelaEdicao = new TabelaValor();
		}
		return tabelaEdicao;
	}

	public void setTabelaEdicao(TabelaValor tabelaEdicao) {
		this.tabelaEdicao = tabelaEdicao;
	}

	public List<TabelaValor> getListaTabelas() {
		if (listaTabelas == null) {
			listaTabelas = entityManager.createQuery("select t from TabelaValor t where t.flgAtivo is true").getResultList();
		}
		return listaTabelas;
	}

	public void setListaTabelas(List<TabelaValor> listaTabelas) {
		this.listaTabelas = listaTabelas;
	}

	public boolean isExibePopupNovaTabela() {
		return exibePopupNovaTabela;
	}

	public void setExibePopupNovaTabela(boolean exibePopupNovaTabela) {
		this.exibePopupNovaTabela = exibePopupNovaTabela;
	}

	public boolean isSelecionadoTodos() {
		return selecionadoTodos;
	}

	public void setSelecionadoTodos(boolean selecionadoTodos) {
		this.selecionadoTodos = selecionadoTodos;
	}
	
	public void onLoad(){
	}
	
	public void salvar(){
		getTabelaEdicao().setFlgAtivo(true);
		entityManager.merge(getTabelaEdicao());
		setExibePopupNovaTabela(false);
		setListaTabelas(null);
		messages.add(Severity.INFO,"Tabela salva com sucesso.");
	}
	
	public void inicializaPopup(){
		setTabelaEdicao(null);
		setExibePopupNovaTabela(true);
	}
	
	public void cancelar(){
		setExibePopupNovaTabela(false);
	}
	
	public void editar(TabelaValor tabela){
		setTabelaEdicao(tabela);
		setExibePopupNovaTabela(true);
	}
	
	public void excluir(){
		List<TabelaValor> listaRemocao = new ArrayList<TabelaValor>();
		for(TabelaValor a : getListaTabelas()){
			if(a.isSelecionado()){
				a.setFlgAtivo(false);
				entityManager.merge(a);
				listaRemocao.add(a);
			}
		}
		getListaTabelas().removeAll(listaRemocao);
		entityManager.flush();
		messages.add(Severity.INFO,"Tabela(s) excluída(s) com sucesso.");
	}
	
	public void selecionaTodos(){
		for(TabelaValor t : getListaTabelas()){
			t.setSelecionado(isSelecionadoTodos());
		}
	}
}
